miniOS_task.h

#ifndef _MINI_TASK

#define _MINI_TASK

#define MAXTASKNUM      30

#define CONTEXTNUM       10 typedef struct _mini_free_task{

unsigned int context_spsr;

unsigned int context[CONTEXTNUM];

unsigned int context_sp;

unsigned int context_lr;

unsigned int context_pc;

}Mini_free_task;

typedef struct _mini_task_manage{

Mini_free_task free_task_poolMAXTASKNUM];

int maximum_task_id;

void (*init)(void);

int (*create)(void(*startfunction)(void));

}Mini_task_manage;

void task_init(void);

int task_create(void(*startfunction)(void));

#endif TCB_task.c

#include

extern Mini_memory_manage memory_manage;

extern Mini_task_manage task_manage;

#define STARTUSRCPSR       0x68000050 int task_create(void(*startfunction(void))

{

int task_index = 0;

unsigned int stack_top = 0;

task_manage.max_task_id++;

task_index = task_manage.max_task_id;

if(task_index>MAXTASKNUM)

{

return -1;

}

stack_top = memory_manage.allocation();

if(stack_top == 0)

{

return -2;

}

task_manage.free_task_pool[task_index].context_spsr

= STARTUSRCPSR;

task_manage.free_task_pool[task_index].context_sp

= stack_top;

task_manage.free_task_pool[task_index].context_pc

= (unsigned int)startfunction;

return task_index;

}

void task_init(void)

{

int i;

for(i=0; i

{

task_manage.free_task_pool[i].context_spsr = 0x00;

memset(task_manage.free_task_pool[i].context, 0sizeof(unsigned int)*CONTEXTNUM);

task_manage.free_task_pool[i].context_sp = 0x00;

task_manage.free_task_pool[i].context_lr = 0x00;

task_manage.free_task_pool[i].context_pc = 0x00;

}

task_manage.max_task_id = -1;

task_manage.init = task_init;

task_manage.create = task_create;

}